var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const session =require("express-session");//引入session

var indexRouter = require('./routes/index');//引入首页路由并赋值给变量
var usersRouter = require('./routes/user');//引入用户管理路由并赋值给变量
var proRouter = require('./routes/pro');//引入商品管理路由并赋值给变量
var bannerRouter = require('./routes/banner');//引入banner管理并赋值给变量路由
var orderRouter = require('./routes/order');//引入订单管理路由并赋值给变量
var cartRouter = require('./routes/cart');//引入购物车管理路由并赋值给变量
var loginRouter = require('./routes/login');//引入购物车管理路由并赋值给变量



var proApiRouter = require('./api/pro');//引入商品接口路由并赋值给变量
var bannerApiRouter = require('./api/banner');//引入banner接口路由并赋值给变量
var userApiRouter = require('./api/user');//引入user接口路由并赋值给变量
var cartApiRouter = require('./api/cart');//引入cart接口路由并赋值给变量
var orderApiRouter = require('./api/order');//引入order接口路由并赋值给变量
var searchApiRouter = require('./api/search');//引入search接口路由并赋值给变量



var app = express();//创建服务对象

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');//调用ejs模板


// 配置cors信息,允许所有来源的数据请求
app.all("*",(req,res,next)=>{
	// 允许所有来源
  res.header("Access-Control-Allow-Origin","*");
  // 允许的请求方式
  res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
  res.header("Access-Control-Allow-Headers",'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , token');
  next();
})




app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false,limit:"10MB" }));//图片过大，limit增加发送数据的大小
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));



app.use('/api/pro', proApiRouter);//注册商品接口路由到服务器上
app.use('/api/banner', bannerApiRouter);//注册banner接口路由到服务器上
app.use('/api/user', userApiRouter);//注册用户接口路由到服务器上
app.use('/api/cart', cartApiRouter);
app.use('/api/order', orderApiRouter);
app.use('/api/search', searchApiRouter);


//1.cookie的方法
// app.all("*",(req,res,next)=>{
//   //通过cookie验证登录状态
//   if(req.cookies.isLogin === "ok" || req.url === "/login" || req.url === "/login/in"){
//     next();
//   }else{
//     res.redirect("/login");
//   }
// })//必须把这个all放在所有的路由之前，而且在上面那些内容之下

//2.sesion的方法
app.use(session({
  secret: '乾坤未定，你我皆是黑马',   // 加密信息，可以随便写
  resave: false,      // 强制保存session，默认为true，建议设置为false
  saveUninitialized: true,    // 强制将未初始化的session存储，默认为true，建议为true
  cookie: { maxAge: 1000 * 30 * 60 }    // 过期时间，毫秒数
}));//把session模块注册到express模块身上

app.all("*",(req,res,next)=>{
  //通过session验证登录状态
  if(req.session.isLogin === "ok" || req.url === "/login" || req.url === "/login/in"){
    next();
  }else{
    res.redirect("/login");
  }
})//必须把这个all放在所有的路由之前，而且在上面那些内容之下


app.use('/', indexRouter);//注册首页路由到服务器上
app.use('/user', usersRouter);//注册用户管理路由到服务器上
app.use('/pro', proRouter);//注册商品管理路由到服务器上
app.use('/banner', bannerRouter);//注册banner管理路由到服务器上
app.use('/order', orderRouter);//注册订单管理路由到服务器上
app.use('/cart', cartRouter);//注册购物车管理路由到服务器上
app.use('/login', loginRouter);//注册购物车管理路由到服务器上

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;//把模块暴漏出去
